package tp.tecnicasdisenio.model.accion;

import java.util.ArrayList;
import java.util.Iterator;

import tp.tecnicasdisenio.dao.ConsultaDaoInterface;
import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.model.AccionInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Consulta;
import tp.tecnicasdisenio.model.entity.ConsultaEstado;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.parser.ParserTituloConsultaTemaAbstract;

public class AccionResolverConsulta  implements AccionInterface {
	protected ConsultaDaoInterface consultaDao;
	protected MateriaDaoInterface materiaDao;
	protected Consulta consulta;
	protected ParserTituloConsultaTemaAbstract parserTitulo;
	
	public void setConsultaDao(ConsultaDaoInterface consultaDao){
		this.consultaDao = consultaDao;
	}
	
	public void setMateriaDao(MateriaDaoInterface materiaDao){
		this.materiaDao = materiaDao;
	}
	
	public void setParser(ParserTituloConsultaTemaAbstract parser){
		this.parserTitulo  = parser;
	}
	
	@Override
	public void aplicarSobre(MailInterface mail,
			AutoRespondedorInterface autoRespondedor) {
		
		if (this.docenteValido(mail)){
			this.consulta = this.consultaDao.getPorId(this.extraerTema(mail));
			this.consulta.setEstado(ConsultaEstado.RESUELTO);
			this.consultaDao.actualizar(this.consulta);
			System.out.println("se resolvio la consulta: " + this.extraerTema(mail));
			autoRespondedor.responderA(mail, "La consulta se paso a estado RESUELTO");
		}else{
			System.out.println("Necesita ser un docente para cambiar el estado a la consulta");
			autoRespondedor.responderA(mail, "Necesita ser un docente para cambiar el estado a la consulta");
		}
	}

	protected String extraerTema(MailInterface mail){
		this.parserTitulo.setMail(mail);
		return this.parserTitulo.getTema();
	}
	
	protected boolean docenteValido(MailInterface mail){
		String emailDocente = mail.getFrom();
		Materia materia = this.materiaDao.getPorEmail(mail.getTo().get(0));
		ArrayList<String> emailsDocentes = this.materiaDao.getEmailsDocentes(materia.getId());
		Iterator<String> itEmails = emailsDocentes.iterator();
		while (itEmails.hasNext()){
			if (itEmails.next().trim().equals(emailDocente)){
				return true;
			}
		}
		
		return false;
	}
}
